<?php

class ValidationService extends Service_Base implements ISingleton 
{
	/**
	 *
	 * @var ValidationService
	 */
	private static $_instance;
	
	/**
	 *
	 * @return ValidationService
	 */
	public static function getInstance()
	{
		if (!self::$_instance) {
			self::$_instance = new self();
		}
		return self::$_instance;
	}	
	
	/**
	 * Get chain of validators and filters required to registration
	 *
	 * @return Zend_Filter_Input
	 */
	public function getRegistrationInputFilterChain()
	{
		$emailValid = new Zend_Validate_EmailAddress();
		$emailValid->setMessage("вводите адрес вида имя@домен", "emailAddressInvalidLocalPart");
		$emailValid->setMessage("точка стоит неверно", "emailAddressDotAtom");
		$emailValid->setMessage("не соответствует формату указанной строки", "emailAddressQuotedString");
		$emailValid->setMessage("некорректное имя домена", "hostnameUndecipherableTld");
		$emailValid->setMessage("адрес является недопустимым", "hostnameInvalidLocalName");
		$emailValid->setMessage("введен некорректрый адрес электронной почты", "emailAddressInvalidFormat");
		$emailValid->setMessage("введен некорректрый адрес электронной почты", "emailAddressInvalidHostname");
		$emailLength = new Zend_Validate_StringLength(8, 32);
		$emailLength->setMessage('допустимая длина адреса электронной почты от 8 до 32 символов', "stringLengthTooLong");
		$emailUnique =  new Zend_Validate_Db_NoRecordExists('profile', 
											  						'email',
																	null,
											  						Db::getConnection()
												  				 );

		$emailValidators = array($emailValid, $emailLength, $emailUnique);
		$nameLength = new Zend_Validate_StringLength(2, 16, 'UTF-8');
		$nameLength->setMessage('длина должна быть более 1 символа', "stringLengthTooShort");
		$nameLength->setMessage('длина должна быть не более 16 символов', "stringLengthTooLong");
		
		$validators = array('email' => $emailValidators,
							'first_name' => array($nameLength),
					);
		$passwordLength = new Zend_Validate_StringLength(6, 12, 'UTF-8');
		$passwordLength->setMessage('длина пароля должна быть более 6 символов', "stringLengthTooShort");
		$passwordLength->setMessage('длина должна быть не более 12 символов', "stringLengthTooLong");
		$repassword = new Validate_Repassword();
		$validators['password'] = array($passwordLength);
		//$validators['repeat_password'] = array($repassword);
			
		$filters = array( '*' => array('StripTags'));
		$input = new Zend_Filter_Input($filters, $validators, null, array('notEmptyMessage' => "Empty"));
		return $input;		
	}
	
}